/**
 * 路由守卫
 * 处理路由跳转前的权限验证、页面标题设置等
 */

import type { Router } from 'vue-router'
import { useAuthStore } from '@/stores/auth'
import { message } from 'ant-design-vue'

/**
 * 设置路由守卫
 */
export function setupRouterGuards(router: Router) {
  /**
   * 全局前置守卫
   */
  router.beforeEach((to, _from, next) => {
    const authStore = useAuthStore()

    // 设置页面标题
    if (to.meta.title) {
      document.title = `${to.meta.title} - 用户管理系统`
    } else {
      document.title = '用户管理系统'
    }

    // 检查路由是否需要认证
    const requiresAuth = to.meta.requiresAuth !== false

    if (requiresAuth) {
      // 需要认证的路由
      if (!authStore.isAuthenticated) {
        // 未登录，跳转到登录页
        message.warning('请先登录')
        next({
          path: '/login',
          query: { redirect: to.fullPath }, // 保存目标路由，登录后可以跳转回来
        })
        return
      }
    } else {
      // 不需要认证的路由（如登录页）
      if (authStore.isAuthenticated && to.path === '/login') {
        // 已登录用户访问登录页，重定向到首页
        next({ path: '/' })
        return
      }
    }

    next()
  })

  /**
   * 全局后置钩子
   */
  router.afterEach((_to, _from, failure) => {
    if (failure) {
      console.error('路由跳转失败:', failure)
    }

    // 可以在这里添加页面加载完成后的处理逻辑
    // 例如：NProgress.done()
  })

  /**
   * 全局解析守卫
   */
  router.beforeResolve((_to, _from, next) => {
    // 可以在这里添加异步组件加载完成后的处理逻辑
    next()
  })
}
